/**
 * @author phi
 */

(function(){ "use strict"; })();

/**
 * @namespace
 * @memberof    TM
 */
TM.Geom = TM.Geom || {};

(function(){
    
    /**
     * @lends   TM.Geom.Circle.prototype
     */
    TM.Geom.Circle = TM.createClass({
        x: 0,
        y: 0,
        radius: 0,
        
        /**
         * @constructs
         * @see <a href="./../../test/geom/radius-test.html">Test Program</a>.
         */
        init: function(x, y, radius)
        {
            this.set(x, y, radius);
        },
        
        /**
         * セッター
         */
        set: function(x, y, radius)
        {
            this.x = x;
            this.y = y;
            this.radius = radius;
            
            return this;
        },
        
        /**
         * 移動
         */
        move: function(x, y)
        {
            this.x = x;
            this.y = y;
            return this;
        },
        
        /**
         * 現在位置を基準に移動
         */
        moveBy: function(x, y)
        {
            this.x += x;
            this.y += y;
            return this;
        },
        
        /**
         * リサイズ
         */
        resize: function(size)
        {
            this.radius = size;
            return this;
        },
        
        /**
         * 現在のサイズを基準にリサイズ
         */
        resizeBy: function(size)
        {
            this.radius += size;
            return this;
        },
        
        clone: function()
        {
            
        },
        
        /**
         * 四角形に変換
         */
        toRectangle: function()
        {
            return TM.Geom.Rectangle(this.x, this.y, this.radius, this.radius);
        },
        
        /**
         * 配列に変換
         */
        toArray: function()
        {
            return [this.x, this.y, this.radius];
        }
    });
    
    /**
     * left
     */
    TM.Geom.Circle.prototype.getter("left", function() {
        return this.x - this.radius;
    });
    
    /**
     * top
     */
    TM.Geom.Circle.prototype.getter("top", function() {
        return this.y - this.radius;
    });
    
    /**
     * right
     */
    TM.Geom.Circle.prototype.getter("right", function() {
        return this.x + this.radius;
    });
    
    /**
     * bottom
     */
    TM.Geom.Circle.prototype.getter("bottom", function() {
        return this.y + this.radius;
    });
    
    console.assert(!TM.$Circle, "名前が競合しています!!", "$Circle");
    /**
     * TM.Geom.$Circle の alias.
     * short hand としてお使いください.
     */
    TM.$Circle = TM.Geom.Circle;
    
})();



